package com.example.quiz.controler;

import java.util.ArrayList;

import org.json.JSONException;
import org.json.JSONObject;

import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.util.Log;

import com.example.quiz.Inicial;
import com.example.quiz.model.HttpManager;
import com.example.quiz.model.PacoteRequisicao;
import com.example.quiz.model.Usuario;

public class KitQuiz {
	
	private ArrayList<Quiz> quizes = new ArrayList<Quiz>();
	private int controle;
	
	private Tarefa tarefa;
	private HttpManager hm = new HttpManager();
	private String persistencia = null;
	
	public KitQuiz(){
		controle = -1;
	}	
	
	protected void addQuiz(Quiz quiz){
		quizes.add(quiz);
	}
	
	public Bitmap photo(){
		return quizes.get(controle).getFoto();
	}
	public String pergunta(){
		return quizes.get(controle).getPergunta();
	}
	public String[] alternativas(){
		return quizes.get(controle).getAlternativas();
	}
	public void setAlternativaEscolhida(String alternativaEscolhida){
		quizes.get(controle).setAlternativaEscolhida(alternativaEscolhida);
		
	}
	public String getResposta(){
		return quizes.get(controle).getResposta();
	}
	
	public void nextQuiz(){
		if(controle < (quizes.size()-1)){
			controle++;
		}		
	}	
	public int totalDeQuizes(){
		return quizes.size();
	}
	public int getPontos() {
		int i = 0;
		int pontos = 0;
		for (Quiz q : quizes) {
			if(i <= controle){
				pontos = pontos + q.getPontos();
			}else{
				break;
			}
			i++;
		}
		if(controle == quizes.size()-1){
			int points = Inicial.PONTOS +pontos;	
			long id = Inicial.IDUSUARIO;
			Usuario u = new Usuario();
			u.setId(id);
			u.setPontos(pontos);
			atualizarPontos(u);		
		}
		return pontos;
	}
	public void atualizarPontos(Usuario u){		
		tarefa = new Tarefa();
		PacoteRequisicao pacote = new PacoteRequisicao();
		pacote.setMethod("POST");
		pacote.setUri("http://192.168.25.18:8080/QuizServer/ServletUpdatePontos");
		pacote.setParametro("usuario", u.getUsuario());
		pacote.setParametro("pontos", u.getPontos()+"");
		tarefa.execute(pacote);	
	}
	
	
	private class Tarefa extends AsyncTask<PacoteRequisicao, String, String>{

		@Override
		protected void onPreExecute() {
		}
		
		@Override
		protected String doInBackground(PacoteRequisicao... params) {
			
			try {
				JSONObject json = new JSONObject(hm.getData(params[0]));
				persistencia = json.getString("message"); 
//				Log.i("logquiz",json.getString("message"));
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}			
			return null;
		}
		
		@Override
		protected void onPostExecute(String result) {		
				
			if(Boolean.parseBoolean(persistencia)){
				Log.i("persistencia", "Pontos atualizados");
			}else{
				Log.i("persistencia", "Pontos não atualizados");
			}			
		}
		
		@Override
		protected void onProgressUpdate(String... values) {
		}
	}
	
	public int getAcertos() {
		int i = 0;
		int acertos = 0;
		for (Quiz q : quizes) {
			if(i <= controle){
				if(q.getResultado()){
					acertos++;
				}
			}else{
				break;
				
			}
			i++;
		}
		return acertos;
	}	
	public boolean hasNext(){
		if(controle < quizes.size()-1){
			return true;
		}else{
			return false;
		}
	}
}
